home *** CD-ROM | disk | FTP | other *** search
/ Aminet 30 / Aminet 30 (1999)(Schatztruhe)[!][Apr 1999].iso / Aminet / dev / cross / GBDK-2.0.lha / GBDK / lib / sgb.s < prev    next >
Text File  |  1998-10-30  |  2KB  |  146 lines

  1.     .include        "global.s"
  2.  
  3.     .PAL_01        = 0x00
  4.     .PAL_23        = 0x01
  5.     .PAL_03        = 0x02
  6.     .PAL_12        = 0x03
  7.     .ATTR_BLK    = 0x04
  8.     .ATTR_LIN    = 0x05
  9.     .ATTR_DIV    = 0x06
  10.     .ATTR_CHR    = 0x07
  11.     .SOUND        = 0x08
  12.     .SOU_TRN    = 0x09
  13.     .PAL_SET    = 0x0A
  14.     .PAL_TRN    = 0x0B
  15.     .ATRC_EN    = 0x0C
  16.     .TEST_EN    = 0x0D
  17.     .ICON_EN    = 0x0E
  18.     .DATA_SND    = 0x0F
  19.     .DATA_TRN    = 0x10
  20.     .MLT_REQ    = 0x11
  21.     .JUMP        = 0x12
  22.     .CHR_TRN    = 0x13
  23.     .PCT_TRN    = 0x14
  24.     .ATTR_TRN    = 0x15
  25.     .ATTR_SET    = 0x16
  26.     .MASK_EN    = 0x17
  27.     .OBJ_TRN    = 0x18
  28.  
  29.     .area   _CODE
  30.  
  31.     ;; Check if running on SGB
  32.     ;;   Set A to 0xFF when running on SGB
  33.     ;;   Clear A when running on DMG
  34. .sgb_check::
  35. _sgb_check::
  36.     LD    HL,#.MLT_REQ_2
  37.     CALL    .sgb_transfer
  38.     CALL    .wait4
  39.     LDH    A,(.P1)
  40.     AND    #0x03
  41.     CP    #0x03
  42.     JR    NZ,.sgb_mode
  43.  
  44.     LD    A,#0x20        ; Controller read (dummy)
  45.     LDH    (.P1),A
  46.     LDH    A,(.P1)
  47.     LDH    A,(.P1)
  48.     CPL
  49.     AND    #0x0F
  50.     SWAP    A
  51.     LD    B,A
  52.     LD    A,#0x30
  53.     LDH    (.P1),A
  54.     LD    A,#0x10
  55.     LDH    (.P1),A
  56.     LDH    A,(.P1)
  57.     LDH    A,(.P1)
  58.     LDH    A,(.P1)
  59.     LDH    A,(.P1)
  60.     LDH    A,(.P1)
  61.     LDH    A,(.P1)
  62.     LD    A,#0x30
  63.     LDH    (.P1),A
  64.     LDH     A,(.P1)
  65.     AND    #0x03
  66.     CP    #0x03
  67.     JR    NZ,.sgb_mode
  68.  
  69. .dmg_mode:
  70. ;    LD    HL,#.MLT_REQ_1
  71. ;    CALL    .sgb_transfer
  72. ;    CALL    .wait4
  73.     XOR    A
  74.     RET
  75.  
  76. .sgb_mode:
  77.     LD    HL,#.MLT_REQ_1
  78.     CALL    .sgb_transfer
  79.     CALL    .wait4
  80.     LD    A,#0xFF
  81.     RET
  82.  
  83. .sgb_transfer::
  84.     LD    A,(HL)        ; Top of command data
  85.     AND    #0x03
  86.     RET    Z
  87.     LD    B,A        ; Number of translated packet
  88.     LD    C,#0x00        ; Lower part of #FF00
  89. 1$:
  90.     PUSH    BC
  91.     XOR    A        ; Start to write
  92.     LDH    (C),A
  93.     LD    A,#0x30
  94.     LDH    (C),A
  95.     LD    B,#0x10        ; Set counter to transfer 16 byte
  96. 2$:    LD    E,#0x08        ; Set counter to transfer 8 bit
  97.     LD    A,(HL+)
  98.     LD    D,A
  99.  
  100. 3$:
  101.     BIT    0,D
  102.     LD    A,#0x10        ; P14 = high, P15 = low  (output "1")
  103.     JR    NZ,4$
  104.     LD    A,#0x20        ; P14 = low,  P15 = high (output "0")
  105. 4$:
  106.     LDH    (C),A
  107.     LD    A,#0x30        ; P14 = high, P15 = high
  108.     LDH    (C),A
  109.     RR    D        ; Shift 1 bit to right
  110.     DEC    E
  111.     JR    NZ,3$
  112.  
  113.     DEC    B
  114.     JR    NZ,2$
  115.     LD    A,#0x20        ; 129th bit "0" output
  116.     LDH    (C),A
  117.     LD    A,#0x30
  118.     LDH    (C),A
  119.  
  120.     POP    BC
  121.     DEC    B
  122.     RET    Z
  123.     CALL    .wait4        ; Software wait for about 4 frames
  124.     JR    1$
  125.  
  126. .wait4:
  127.     LD    DE,#7000
  128. .1$:
  129.     NOP            ; 1 +
  130.     NOP            ; 1 +
  131.     NOP            ; 1 +
  132.     DEC    DE        ; 2 +
  133.     LD    A,D        ; 1 +
  134.     OR    E        ; 1 +
  135.     JR    NZ,.1$        ; 3 = 10 cycles
  136.     RET
  137.  
  138.     .area   _CODE
  139.  
  140. .MLT_REQ_1:
  141.     .byte    (.MLT_REQ<<3)|1,0x00,0x00,0x00,0x00,0x00,0x00,0x00
  142.     .byte    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
  143. .MLT_REQ_2:
  144.     .byte    (.MLT_REQ<<3)|1,0x01,0x00,0x00,0x00,0x00,0x00,0x00
  145.     .byte    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
  146.